home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vistd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  7KB  |  183 lines

  1. /*  VIstd.h
  2.  
  3.   vector management functions for data type "int".
  4.  
  5.   Copyright (c) 1996-1999 by Martin Sander
  6.   All Rights Reserved.
  7. */
  8.  
  9. #ifndef __VISTD_H
  10. #define __VISTD_H
  11.  
  12. #if !defined( __VECLIB_H )
  13.    #include <VecLib.h>
  14. #endif
  15.  
  16. #ifdef __cplusplus
  17.    extern "C" {
  18. #endif
  19.  
  20. /***********  Generation of Arrays and Vectors  *************************/
  21.  
  22. iVector  __vf  VI_vector( ui size );
  23. iVector  __vf  VI_vector0( ui size );
  24.  
  25. /***************  Addressing single vector elements ******************/
  26.  
  27. int _VFAR * VI_Pelement( iVector X, ui n );
  28.       /* returns a pointer to the n'th element of X. For the memory model
  29.          HUGE, the pointer is normalized. */
  30. #define VI_element( X, n )  (*VI_Pelement( X, n ))
  31.  
  32. /****************** Initialization  ******************************/
  33.  
  34. void  __vf  VI_equ0( iVector X, ui size );
  35. void  __vf  VI_equC( iVector X, ui size, int C );
  36. void  __vf  VI_equV( iVector Y, iVector X, ui size );
  37. void  __vf  VIo_ramp( iVector X, ui size, int Start, int Rise );
  38. #ifdef V_trapIntError
  39.     #define VI_ramp    VIo_ramp
  40. #else
  41.     void  __vf  VI_ramp( iVector X, ui size, int Start, int Rise );
  42. #endif
  43. long  __vf  VI_random( iVector X, ui size, long seed,
  44.                        int MinVal, int MaxVal );  /*  returns new seed */
  45.  
  46.  
  47. /************** Data-type interconversions  ***************************/
  48.  
  49. void  __vf   V_BItoI(  iVector  Y, biVector X, ui size );  /* up-conversion */
  50. void  __vf   V_SItoI(  iVector  Y, siVector X, ui size );
  51. void  __vf   V_ItoLI(  liVector Y, iVector  X, ui size );
  52. void  __vf   V_ItoQI(  qiVector Y, iVector  X, ui size );
  53.  
  54. void  __vf   Vo_ItoU( uVector Y, iVector X, ui size );  /* signed-unsigned */
  55. void  __vf   Vo_UtoI( iVector Y, uVector X, ui size );
  56.  
  57. void  __vf   V_ItoBI(  biVector Y, iVector  X, ui size ); /* down-conversion */
  58. void  __vf   Vo_ItoSI( siVector Y, iVector  X, ui size );
  59. void  __vf   Vo_LItoI( iVector  Y, liVector X, ui size );
  60. void  __vf   Vo_QItoI( iVector  Y, qiVector X, ui size );
  61. #ifdef V_trapIntError
  62.     #define V_ItoU    Vo_ItoU
  63.     #define V_UtoI    Vo_UtoI
  64.     #define V_ItoSI   Vo_ItoSI
  65.     #define V_LItoI   Vo_LItoI
  66.     #define V_QItoI   Vo_QItoI
  67. #else
  68.     void  __vf   V_ItoU( uVector Y, iVector X, ui size );
  69.     void  __vf   V_UtoI( iVector Y, uVector X, ui size );
  70.     void  __vf   V_ItoSI( siVector Y, iVector  X, ui size );
  71.     void  __vf   V_LItoI( iVector  Y, liVector X, ui size );
  72.     void  __vf   V_QItoI( iVector  Y, qiVector X, ui size );
  73. #endif
  74.  
  75. void  __vf   V_ItoF(   fVector Y, iVector  X, ui size );
  76. void  __vf   V_ItoD(   dVector Y, iVector  X, ui size );
  77. #ifdef __BORLANDC__
  78.     void  __vf   V_ItoE(   eVector Y, iVector  X, ui size );
  79. #else  /* no 80-bit IEEE reals with Visual C++ */
  80.     #define V_ItoE V_ItoD
  81. #endif
  82.  
  83. /************** Index-oriented manipulations ***************************/
  84.  
  85. void  __vf  VI_rev( iVector Y, iVector X, ui size );
  86. #ifdef V_HUGE
  87.     void  __vf  VI_rotate( iVector Y, iVector X, ui size, long pos );
  88. #else
  89.     void  __vf  VI_rotate( iVector Y, iVector X, ui size, int pos );
  90. #endif
  91.  
  92. void  __vf  VI_delete( iVector X, ui size, ui pos );
  93. void  __vf  VI_insert( iVector X, ui size, ui pos, int C );
  94.  
  95. void  __vf  VI_sort( iVector Y, iVector X, ui size, int dir );
  96. void  __vf  VI_sortind( uiVector Ind, iVector X, ui size, int dir );
  97.  
  98. void  __vf  VI_subvector( iVector Y, ui sizey, iVector X, int samp );
  99. void  __vf  VI_subvector_equC( iVector Y, ui subsz, unsigned samp, int C );
  100. void  __vf  VI_subvector_equV( iVector Y, ui subsz, unsigned samp, iVector X );
  101.  
  102. void  __vf  VI_indpick( iVector Y, uiVector Ind, ui sizey, iVector X );
  103. void  __vf  VI_indput(  iVector Y, iVector X, uiVector Ind, ui sizex );
  104.  
  105. ui    __vf  VI_searchC( iVector XTab, ui size, int C, int mode );
  106. void  __vf  VI_searchV( uiVector Ind, iVector X, ui sizex,
  107.                         iVector Tab, ui sizetab, int mode );
  108.  
  109.  
  110. /********************   One-dimensional Vector Operations  ********/
  111.  
  112. int  __vf  VIo_sum( iVector X, ui size );
  113. void __vf  VIo_runsum( iVector Y, iVector X, ui size );
  114. #ifdef V_trapIntError
  115.     #define VI_sum     VIo_sum
  116.     #define VI_runsum  VIo_runsum
  117. #else
  118.     int  __vf  VI_sum( iVector X, ui size );
  119.     void __vf  VI_runsum( iVector Y, iVector X, ui size );
  120. #endif
  121. int    __vf  VI_max( iVector X, ui size );
  122. int    __vf  VI_min( iVector X, ui size );
  123. int    __vf  VI_maxind( ui _VFAR *Ind, iVector X, ui size );
  124. int    __vf  VI_minind( ui _VFAR *Ind, iVector X, ui size );
  125. void   __vf  VI_runmax( iVector Y, iVector X, ui size );
  126. void   __vf  VI_runmin( iVector Y, iVector X, ui size );
  127. double __vf  VI_fsum( iVector X, ui size );
  128. double __vf  VI_mean( iVector X, ui size );
  129.  
  130. int    __vf  VI_iselementC( iVector Tab, ui size, int  C );
  131. ui     __vf  VI_iselementV( iVector Y, iVector X, ui sizex,
  132.                              iVector Tab, ui sizetab );
  133.  
  134.  
  135. /************************ Input / Output ******************************/
  136.  
  137. void  __vf   V_ifprint(  FILE _VFAR *stream, void _VFAR *X, ui size,
  138.                   unsigned nperline, unsigned linewidth, unsigned vers );
  139. #define VI_fprint( st, x, sz, npl, lw )  \
  140.              V_ifprint(  st, (void _VFAR *)(x), sz, npl, lw, 4 )
  141.  
  142. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  143.     void __vf  V_icprint(  void _VFAR *X, ui size, unsigned nperline, unsigned vers );
  144.     #define VI_cprint( x, sz, npl ) V_icprint( (void _VFAR *) (x), sz, npl, 4 )
  145. #endif
  146. #define VI_print( x, sz, npl )  \
  147.              V_ifprint(  stdout, (void _VFAR *)(x), sz, npl, 80, 4 )
  148.  
  149. void  __vf   V_setRadix( int radix );
  150.            /* radix to be assumed by all whole-number read functions V??_read */
  151. void  __vf   VI_read( iVector X, ui size, FILE _VFAR *stream );
  152. void  __vf   VI_write( FILE _VFAR *stream, iVector X, ui size );
  153. void  __vf   VI_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  154. void  __vf   VI_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  155. void  __vf   VI_setWriteFormat( char _VFAR *FormatString );
  156.                                             /* for VI_write and VI_nwrite */
  157. void  __vf   VI_setWriteSeparate( char _VFAR *SepString ); /* for VI_write */
  158. void  __vf   VI_setNWriteSeparate( char _VFAR *SepString ); /* for VI_nwrite */
  159. #ifdef V_HUGE
  160.     void  __vf   VI_store(  FILE _VFAR *stream, iVector X, ui size );
  161.     void  __vf   VI_recall( iVector X, ui size, FILE _VFAR *stream );
  162. #else
  163.     #ifdef __cplusplus
  164.          void  inline VI_store( FILE _VFAR *stream, iVector X, ui size )
  165.          {    fwrite( X, sizeof(int), size, stream ); 
  166.          }
  167.          void  inline VI_recall( iVector X, ui size, FILE _VFAR *stream )
  168.          {    fread(  X, sizeof(int), size, stream );
  169.          }
  170.     #else
  171.         #define VI_store( str, X, sz )  \
  172.                      fwrite( X, sizeof(int), sz, str )
  173.         #define VI_recall( X, sz, str ) \
  174.                      fread(  X, sizeof(int), sz, str )
  175.     #endif
  176. #endif      /* VI_store, VI_recall in binary format */
  177.  
  178. #ifdef __cplusplus
  179. }
  180. #endif
  181.  
  182. #endif   /*  __VISTD_H    */
  183.